channelFlow
目前還沒用過, 專案裡也只有一個功能有在使用, 先紙上談兵研讀一下.channelFlow
是個 builder function, 用來建立一個稱做為 channel flow 類型的 flow. 提供一種方法來建構一個 flow, 在這個 flow 中,values 會使用 coroutines 從程式碼的不同部分同時產生。SendChannel
傳送 values 的 clod flow.produceScope
來啟動 child coroutines 並傳送 values 到 channel.suspend
lambda 提供結構化的方式管理 values 的產生以及取消.suspend
lambda 使用不同的 coroutine 功能, 如 launch, async 控制 values 的產生.fun fetchDataFlow(): Flow<String> = channelFlow {
val data1 = launch {
delay(1500)
send("data source A")
}
val data2 = async {
delay(1000)
send("data source B")
}
data1.join()
data2.await()
}
fun main() {
runBlocking {
fetchDataFlow().collect { data ->
println("Received : $data")
}
}
}